A
A
Serif
Sans
White
Sepia
Night
SQlite源码分析
首页
1.
SQLite简介
1.1.
SQLite特性
1.2.
推荐使用场景
1.3.
快速使用SQLite
2.
SQLite体系结构
2.1.
体系结构
2.2.
各结构作用
3.
进程模型
3.1.
什么是VDBE
3.1.1.
sqLite为什么要使用虚拟机
3.1.2.
VDBE的运行
3.1.3.
vdbeInt.h简介
3.2.
VDBE执行方法
3.3.
SQLite执行与VDBE
3.3.1.
OP_Init
3.3.2.
OP_Transaction
3.3.3.
OP_TableLock
3.3.4.
OP_Goto
3.3.5.
OP_ReadCookie
3.3.6.
OP_If
3.3.7.
OP_Integer1
3.3.8.
OP_SetCookie
3.3.9.
OP_Integer2
3.3.10.
OP_SetCookie
3.3.11.
OP_CreateTable
3.3.12.
OP_OpenWrite
3.3.13.
OP_NewRowid
3.3.14.
OP_Null1
3.3.15.
OP_Insert
3.3.16.
OP_Close1
3.3.17.
OP_Close2
3.3.18.
OP_Null2
3.3.19.
OP_OpenWrite1
3.3.20.
OP_MustBeInt
3.3.21.
OP_NotExists
3.3.22.
OP_Rowid
3.3.23.
OP_IsNull
3.3.24.
OP_String
3.3.25.
OP_String1
3.3.26.
OP_String2
3.3.27.
OP_Copy
3.3.28.
OP_String3
3.3.29.
OP_MakeRecord
3.3.30.
OP_Insert1
3.3.31.
OP_Close3
3.3.32.
OP_Integer3
3.3.33.
OP_SetCookie1
3.3.34.
OP_ParseSchema
3.3.35.
OP_Halt
3.4.
SQLite执行过程
3.5.
vdbeaux.c源码概览
3.6.
vdbeaux.c 源码介绍与分析
3.6.1.
创建vdbe结构体
3.6.2.
vdbe准备阶段
3.6.2.1.
相关修改函数
3.6.2.2.
配置函数
3.6.2.3.
析构函数
3.6.3.
debug模式
3.6.3.1.
删除vdbe结构体
3.6.3.2.
列出虚拟机中的程序清单
3.6.3.3.
显示部分
3.6.4.
分配空间
3.6.5.
初始化vdbe
3.6.6.
执行前的准备
3.6.7.
释放资源
3.6.8.
vdbe执行中的处理
3.6.8.1.
函数sqlite3VdbeHalt
3.6.8.2.
函数sqlite3VdbeResetStepResult
3.6.8.3.
函数sqlite3VdbeTransferError
3.6.8.4.
函数sqlite3VdbeReset
3.6.8.5.
函数sqlite3VdbeFinalize
3.6.8.6.
函数sqlite3VdbeDeleteObject和sqlite3VdbeDelete
3.6.8.7.
函数sqlite3VdbeCursorMoveto
3.6.8.8.
函数u64 floatSwap
3.6.8.9.
函数sqlite3VdbeSerialPut
3.6.8.10.
函数sqlite3VdbeAllocUnpackedRecord
3.6.8.11.
函数sqlite3ExpirePreparedStatements
3.6.8.12.
函数sqlite3VdbeSetVarmask
3.7.
vdbesort.c源码概览
3.7.1.
N-路归并的算法及数据结构说明
3.7.2.
结构体定义
3.7.3.
函数定义
4.
关系查询处理器
4.1.
查询解析和授权
4.1.1.
SQLite中的SQL语句
4.1.2.
SELECT的语法图
4.1.3.
SQLite中SQL语句执行步骤
4.1.4.
sqlite查询处理的关键函数
4.1.5.
查询语法树
4.1.6.
FROM子句
4.1.6.1.
SQLite中FROM子句的使用
4.1.6.2.
SQLite中FROM子句的实现
4.1.7.
ON子句
4.1.7.1.
SQLite中ON子句的使用
4.1.7.2.
SQLite中ON子句的实现
4.1.8.
访问授权
4.1.8.1.
SQLite的授权检查实现
4.1.8.2.
设置或清除访问授权
4.1.8.3.
授权返回一个非法的值
4.1.8.4.
验证数据库中表的列信息是否可访问
4.1.8.5.
验证解析树中TK_COLUMN表达式是否可访问
4.1.8.6.
使用给定的代码和参数的授权检查
4.1.8.7.
利用栈存储解析树的授权内容
4.2.
查询重写
4.2.1.
重写器的主要功能
4.2.2.
SQLite查询重写
4.2.2.1.
几类查询重写
4.2.2.2.
子查询扁平化
4.2.2.3.
连接查询
4.2.3.
WHERE子句
4.2.3.1.
WHERE子句具体使用
4.2.3.2.
SQLite中使用addWhereTerm函数和selectInnerLoop函数
4.2.4.
GROUP BY子句
4.2.4.1.
GROUP子句具体使用
4.2.4.2.
SQLite中finalizeAggFunctions函数
4.2.5.
Having子句
4.2.6.
DISTINCT子句
4.2.6.1.
all和distinct子句
4.2.6.2.
codeDistinct函数
4.2.7.
ORDER BY子句
4.2.7.1.
ORDER BY子句具体应用
4.2.7.2.
SQLite中multiSelectOrderBy函数
4.2.8.
LIMIT子句
4.2.8.1.
SQLite中computeLimitRegisters函数
4.2.9.
OFFSET子句
4.2.10.
另外一些重要的函数
4.2.10.1.
sqlite3SelectPrep函数
4.2.10.2.
sqlite3GetVdbe函数
4.2.10.3.
minMaxQuery函数
4.3.
查询优化器
4.3.1.
查询优化流程
4.3.2.
SQLite中几种查询优化做的处理
4.3.3.
查询扫描策略
4.3.4.
查询策略代价模型及计算方式
4.3.5.
与查询代价有关的处理-ANALYZE命令
4.3.5.1.
Analyze的SQL语法
4.3.5.2.
Analyze 命令接口
4.3.5.3.
analyzeDatabase函数
4.3.5.4.
analyzeTable函数
4.3.5.5.
loadAnalysis函数
4.3.5.6.
analyzeOneTable函数
4.3.5.7.
stat3Init函数,stat3Push函数,stat3Get函数
4.3.5.8.
其他用到的一些函数
4.3.6.
SQLite中查询优化的具体实现
4.3.6.1.
sqlite3WhereBegin函数
4.3.6.2.
exprAnalyzeAll函数
4.3.6.3.
exprAnalyze函数
4.3.6.4.
bestBtreeIndex函数
4.3.6.5.
bestOrClauseIndex函数
4.3.6.6.
whereRangeScanEst函数
4.3.6.7.
codeOneLoopStart函数
4.3.6.8.
sqlite3WhereEnd函数
4.3.7.
where.c概述
4.3.7.1.
where.c的执行过程
4.3.7.2.
where.c中主要结构体和函数调用关系
4.3.7.2.1.
主要结构体
4.3.7.2.2.
主要函数调用关系
4.3.7.3.
where子句的查询优化
4.3.7.3.1.
WHERE子句分析
4.3.7.3.2.
BETWEEN语句优化
4.3.7.3.3.
OR语句优化
4.3.7.3.4.
LIKE语句优化
4.3.7.3.5.
Skip-Scan优化
4.3.7.3.6.
多重索引的选择
4.3.7.3.7.
覆盖索引
4.3.7.3.8.
自动索引
4.3.7.4.
wherecSummary
4.3.8.
SQLite中查询优化方式的总结
4.4.
查询执行器
4.4.1.
数据修改语句
4.4.2.
Build.c分析
4.4.2.1.
实现的功能
4.4.2.2.
具体功能的实现
4.4.2.2.1.
表的创建
4.4.2.2.2.
表的删除
4.4.2.2.3.
与表相关的操作
4.4.2.2.4.
视图的创建
4.4.2.2.5.
索引的创建
4.4.2.2.6.
索引的删除
4.4.2.2.7.
释放索引(与删除索引相关)
4.4.2.2.8.
与索引相关的其他操作
4.4.2.2.9.
ID序列的创建
4.4.2.2.10.
ID序列的删除
4.4.2.2.11.
ID序列其他操作
4.4.2.2.12.
事务的开始
4.4.2.2.13.
事务的提交
4.4.2.2.14.
事务的回滚
4.4.2.2.15.
临时数据库
4.4.2.2.16.
写操作
4.4.2.2.17.
异常检查
4.4.3.
Insert.c解析
4.4.3.1.
insert的主要关系
4.4.3.2.
sqlite3OpenTable()
4.4.3.3.
sqlite3IndexAffinityStr()
4.4.3.4.
sqlite3TableAffinityStr()
4.4.3.5.
static int readsTable()
4.4.3.6.
static int autoIncBegin()
4.4.3.7.
void sqlite3AutoincrementBegin()
4.4.3.8.
static void autoIncStep()
4.4.3.9.
sqlite3AutoincrementEnd()
4.4.3.10.
xferOptimization()
4.4.3.11.
sqlite3Insert()
4.4.3.12.
sqlite3GenerateConstraintChecks()
4.4.3.13.
sqlite3CompleteInsertion()
4.4.3.14.
sqlite3OpenTableAndIndices()
4.4.3.15.
xferCompatibleCollation()
4.4.3.16.
xferCompatibleIndex()
4.4.4.
分析delete.c和update.c
4.4.4.1.
CAST函数
4.4.4.2.
ESCAPE
4.4.4.3.
Like和Glob
4.4.4.4.
ISNULL
4.4.4.5.
between
4.4.4.6.
EXISTS
4.4.4.7.
case when
4.4.4.8.
RAISE()函数
4.4.5.
Delete.c中主要函数的实现及功能
4.4.5.1.
sqlite3SrcListLookup()函数
4.4.5.2.
sqlite3IsReadOnly()函数
4.4.5.3.
sqlite3MaterializeView()函数
4.4.5.4.
sqlite3LimitWhere()函数
4.4.5.5.
sqlite3DeleteFrom()函数
4.4.5.6.
sqlite3GenerateRowDelete()函数
4.4.5.7.
sqlite3GenerateRowIndexDelete()函数
4.4.5.8.
sqlite3GenerateIndexKey()函数
4.4.6.
Update.c简介
4.4.6.1.
sqlite3ColumnDefault函数说明
4.4.6.2.
sqlite3ColumnDefault函数结构
4.4.6.3.
函数流程图
4.4.6.4.
sqlite3Update函数说明
4.4.6.5.
sqlite3Update函数结构
4.4.6.6.
sqlite3Update函数流程图
4.4.6.7.
updateVirtualtable函数说明
4.4.6.8.
updateVirtualtable函数结构
4.4.6.9.
updateVirtualtable函数流程图
4.4.7.
Update.c中主要函数的实现及功能
4.4.7.1.
sqlite3ColumnDefault()函数
4.4.7.2.
sqlite3Update()函数
4.4.7.3.
updateVirtualTable()函数
4.4.8.
Trigger.c
4.4.8.1.
基本语法
4.4.8.2.
函数介绍
4.4.8.3.
触发器编码(Code)
4.4.8.4.
sqlite3BeginTrigger和sqlite3FinishTrigger
4.4.8.5.
Step
4.4.9.
实现修改表功能ALTER TABLE(alter.c的源码分析)
4.4.9.1.
重命名表的名称
4.4.9.2.
修改任何外键约束定义重命名表为父表
4.4.9.3.
对触发器的表名做修改
4.4.9.4.
创建表达式形式的文本
4.4.9.5.
生成用来选择有外键约束的全部表的表达式文本
4.4.9.6.
删除和重新加载从数据库表pTab的内部模式
4.4.9.7.
判断一个系统表
4.4.9.8.
删除表名并重命名为新表名
4.5.
生成,清空,删除SELECT查询树函数
4.6.
数据库扩展性
4.6.1.
virtualtable虚表
4.6.2.
vacuum.c分析
4.6.3.
Loadext及clegacy.c文件解析
4.6.4.
R-tree概述
4.6.5.
使用Rtree模块
4.6.5.1.
创建一个Rtree索引
4.6.5.2.
获取一个Rtree索引
4.6.5.3.
查询一个Rtree索引
4.6.6.
有效使用Rtree
4.6.7.
定制R树查询
4.6.7.1.
旧版本xGeom回调函数
4.6.7.2.
全新xQueryFunc回调函数
4.6.7.3.
定制查询注意事项
4.6.8.
SQLiteR树结构
4.6.8.1.
结点结构
4.6.8.2.
结点单元结构
4.6.9.
R树特点及算法实现
4.6.9.1.
查找
4.6.9.2.
插入
4.6.9.3.
删除
4.6.9.4.
更新
4.6.9.5.
平方分裂
4.6.9.6.
线性分裂
4.6.10.
R*树优化
4.6.10.1.
局部优化
4.6.10.2.
整体优化
4.6.11.
全文索引
4.6.12.
全文检索(full-text search)
4.6.12.1.
索引的组织结构
4.6.12.2.
索引的创建
4.6.12.3.
索引的搜索
4.6.13.
Lemon语法分析器模板文件
4.6.14.
分词器
4.6.14.1.
Tokenizer运行原理
4.6.14.2.
代码code发生器
4.6.14.3.
FTS3概述
4.6.14.4.
分词器:FTS tokenizer分析
4.6.14.5.
自定义(用户)实现tokenizers
4.6.15.
FTS3
4.6.15.1.
fts3_expr简介
4.6.15.2.
ParseContext结构体
4.6.15.3.
getNextToken()函数
4.6.15.4.
getNextString()函数
4.6.15.5.
getNextNode()函数
4.6.15.6.
insertBinaryOperator()函数
4.6.15.7.
fts3ExprParse()函数
4.6.15.8.
sqlite3Fts3ExprParse()函数
4.7.
在SQLite3下查询数据
4.8.
其它一些函数的功能
5.
存储管理
5.1.
文件系统
5.1.1.
文件函数及结构体分析
5.1.2.
系统接口
5.1.2.1.
简析打开数据库流程
5.1.2.2.
简析os_win.c文件的函数结构
5.1.2.3.
简析SQLite的锁机制
5.1.2.4.
SQLite在Windows系统上的锁机制实现流程
5.1.2.5.
锁机制在Windows中的实现源码
5.1.2.6.
文件结构
5.1.2.7.
功能的主要实现
5.1.3.
filesysteminterface
5.2.
SQLite中B-tree的实现
5.2.1.
SQLite中的B-tree
5.2.2.
SQLite层次化数据组织
5.2.3.
页面溢出
5.2.4.
B-tree API
5.2.5.
实现的技术细节
5.3.
Pager概述
5.3.1.
Pager状态
5.3.2.
Pager的数据库文件页
5.3.3.
Pager的相关参数
5.3.4.
页面类型
5.3.5.
Pager的状态
5.3.6.
Pager的结构
5.3.7.
日志
5.3.8.
页面缓存
5.3.9.
锁机制
5.4.
Pager的运行流程概述
5.4.1.
打开/关闭一个页面连接
5.4.2.
配置页面对象的函数
5.4.3.
获取和释放页面引用的函数
5.4.4.
对页面引用的操作
5.4.5.
管理页面事务和保存点的函数
5.4.6.
查询页面状态/配置
5.4.7.
截断数据库文件
5.4.8.
测试/调试
5.5.
页面缓冲管理
5.5.1.
缓存管理
5.5.2.
缓存组织
5.6.
cache具体结构
5.6.1.
Struct PCache与Struct PCach1
5.6.2.
Struct PCache VS Struct PCache1
5.6.3.
struct PgHdr 1与struct PCache1
5.6.4.
cache内存结构
5.6.5.
Struct PGroup与Struct PCacheGlobal
5.7.
Bitvec.c介绍
5.7.1.
具体实现及源码分析
6.
事务:并发控制和恢复
6.1.
SQLite不同模式的锁与实现
6.1.1.
SQLite锁机制简介
6.1.2.
文件加锁方法
6.1.2.1.
POSIX locking
6.1.2.2.
No-op Locking
6.1.2.3.
dot-file Locking
6.1.2.4.
flock Locking
6.1.2.5.
Named Semaphore Locking
6.1.2.6.
AFP Locking
6.1.3.
各个锁机制实现函数
6.2.
SQlite互斥锁分析
6.2.1.
mutex.h
6.2.2.
mutex.c
6.2.2.1.
Mutex初始化
6.2.2.2.
互斥体enter使用
6.2.2.3.
互斥体try使用
6.2.3.
Mutex_w32.c
6.2.3.1.
互斥锁结构体
6.2.3.2.
设置结构体下的锁的函数指针
6.2.3.3.
初始化互斥锁
6.2.3.3.1.
互斥锁结构体分配
6.2.3.4.
请求锁
6.2.3.5.
销毁锁
6.2.4.
mutex_unix.c
6.2.4.1.
互斥锁结构体
6.2.4.2.
函数功能
6.2.5.
mutex_noop.c
6.2.5.1.
非调试情况
6.2.5.2.
调试的情况
6.2.6.
memjournal.c
6.2.6.1.
日志相关存储结构
6.2.6.1.1.
函数指针结构体
6.2.6.2.
函数功能表
6.2.6.3.
打开内存日志
6.2.6.4.
读取内存日志
6.2.6.5.
是否为内存日志文件
6.3.
memjournal.c
6.3.1.
函数及结构体功能
6.4.
Wal的介绍
6.5.
Wal的工作原理
6.5.1.
Wal的优缺点
6.5.2.
工作原理
6.5.3.
Wal文件格式
6.5.4.
校验
6.5.5.
读写事务
6.5.6.
保存点
6.5.7.
性能问题
6.5.8.
检查点
6.6.
lockandmutex
7.
共享组件
7.1.
目录管理器
7.2.
内存分配器
7.2.1.
动态内存分配器
7.2.1.1.
空操作内存分配器(mem0.c)
7.2.1.2.
缺省内存分配器(mem1.c)
7.2.1.3.
调试内存分配器(mem2.c)
7.2.1.3.1.
关于backtrace
7.2.1.3.2.
设置哨兵对内存破坏进行检查
7.2.1.3.3.
通过unfree list检查内存泄露
7.2.1.4.
内存分配函数
7.2.2.
内存分配器
7.2.2.1.
mem0.c
7.2.2.2.
mem1.c
7.2.2.3.
mem2.c
7.2.2.4.
mem3.c
7.2.2.5.
mem5.c
7.2.3.
Mem3.c代码分析
7.2.3.1.
Mem3.c功能概述
7.2.3.2.
名词及相关概念
7.2.3.3.
块存储结构
7.2.3.3.1.
内存分配结构体
7.2.3.4.
Mem3.c函数列表
7.2.3.5.
函数代码解析
7.2.4.
mem5.c
7.2.4.1.
mem5.c功能概述
7.2.4.2.
mem5.c调用的C接口
7.2.4.3.
名词及相关概念
7.2.4.4.
函数及结构体功能
7.2.4.5.
重要代码解析
7.2.5.
Malloc.c
7.2.5.1.
特性
7.2.5.2.
测试
7.2.5.3.
配置
7.2.5.4.
API介绍
7.2.5.5.
总结
7.2.6.
dynamicmemorymalloc
7.3.
其他工具
7.3.1.
SqliteLimite.h
7.3.2.
SqliteInt.h
7.3.3.
Global.c模块源码分析
7.3.4.
主函数分析
7.3.4.1.
vdbemem.c分析
7.3.4.1.1.
SQLite的虚拟机
7.3.4.1.2.
结构体"Mem"的操作函数-vdbemem.c
7.3.4.2.
函数功能
7.3.4.3.
操作控制
7.3.5.
Printf.c分析
7.3.5.1.
数据类型定义
7.3.5.2.
sqlite3AppendSpace()函数
7.3.5.3.
sqlite3VXPrintf()函数
7.3.5.4.
sqlite3StrAccumAppend()函数
7.3.5.5.
*sqlite3StrAccumFinish()函数
7.3.5.6.
sqlite3StrAccumReset()函数
7.3.5.7.
sqlite3StrAccumInit()函数
7.3.5.8.
*sqlite3VMPrintf()函数
7.3.5.9.
*sqlite3MPrintf()函数
7.3.5.10.
*sqlite3MAppendf()函数
7.3.5.11.
*sqlite3_vmprintf()函数
7.3.5.12.
*sqlite3_mprintf()函数
7.3.5.13.
*sqlite3_vsnprintf()函数;*sqlite3_snprintf()函数
7.3.5.14.
renderLogMsg()函数
7.3.5.15.
sqlite3_log()函数
7.3.5.16.
sqlite3DebugPrintf()函数
7.3.5.17.
sqlite3XPrintf()函数
7.3.6.
date.c模块源码分析
7.3.6.1.
主要结构体
7.3.6.2.
获取系统读数
7.3.6.3.
读取时区差异扩展表示格式
7.3.6.4.
正常时间与儒略日数之间的相互转换
7.3.6.5.
转换为Julian Day Number所发生的的错误个数
7.3.6.6.
获取系统当前时间
7.3.6.7.
时间戳的语法改良
7.3.6.8.
时间的表示
7.3.7.
util.c分析
7.3.8.
utf.c分析
7.3.9.
Ctime.c模块源码分析
7.3.10.
Printf.c
7.3.10.1.
功能
7.3.10.2.
宏定义
7.3.10.3.
结构体
7.3.10.4.
函数
7.3.10.4.1.
et_getdigit
7.3.10.4.2.
sqlite3AppendSpace
7.3.10.4.3.
sqlite3VXPrintf
7.3.10.4.4.
其他函数
7.3.11.
date.c模块源码分析(1)
7.3.12.
date.c模块源码分析(2)
7.3.13.
forexample
7.4.
complete.c模块源码分析
7.5.
callback.c模块源码分析
7.6.
Hash
7.7.
Sqlite源代码介绍
8.
Shell模式下使用CLP
8.1.
命令行模式下的CLP
8.2.
重要的API函数
8.3.
用户自定义函数
8.4.
结果代码
9.
实现SQL的各种函数(func.c的源码分析)
9.1.
算术函数
9.2.
字符处理函数
9.3.
条件判断函数
9.4.
集合函数
9.5.
其他函数
Generated using GitBook
主函数main分析
该部分是对动态内存分配和main函数的剖析